home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1994-05-04 | 4.8 KB | 192 lines |
- > AlarmBoot030
- Setzen der Systemvariablen <AlarmMode>
- 0 - normaler Start
- 1 - Automatikstart
- Wir testen ob die Alarmleitung gesetzt ist und ob das Alarmsystem
- aktiv war. -> Setzen der Variablen.
- Wir lesen die Alarmzeit der Uhr und vergleichen sie mit der Uhrzeit.
- Ist die Alarmzeit mehr als 5 Minuten hinter der aktuellen Zeit, so
- heben wir den Automatikstart wieder auf.
- + 8192
- globale Variablen
- >clkadr% = %10100000 :
- IIC-Adresse der Archimedes-Uhr
- =file$ = "<Alarmfile>" :
- Name und Pfad der Alarm-Datei
- cur% 8, alm% 8, buf% 32, ord% 40, str% 64
- "Error in ";
- "*CLOSE":
- 8debug% =
- :
- Informationstexte anzeigen ?
- "XOS_ReadVarVal", "AlarmExt$Debug", buf%, -1, 0, 0
- ,,d%
- d%<>0
- debug% =
- "XWimp_ReadSysInfo", 3
- d%=0
- debug% =
- debug%
- "AlarmBoot version 0.30, ABt."
- 5x% =
- alarmCheck :
- Teste das Alarmsystem.
- (x%
- 6) = 6
- Die Alarmleitung ist gesetzt...
- +
- debug%
- "The Alarmline is set."
- !G
- weitere Auswertung. Wir vergleichen mit dem 5ByteBlock, ob die
- "C
- Alarm-Zeit + 5 Minuten noch groesser ist als die Echtzeit.
- #1
- "Territory_ReadCurrentTimeZone"
- ,zone%
- $E
- Hole aktuelle Zeit als 5 Byte Block UTC, PRM 565, PRM3 1-421
- %' ?cur% = 3:
- "OS_Word", 14, cur%
- debug%
- 'N
- "Territory_ConvertStandardDateAndTime", -1, cur%, str%, 60
- ,end%
- ?end% = 13
- )
- "current Time: "$str%
- +G
- Wir bereiten den Alarmbuffer vor und setzen das aktuelle Jahr.
- ,9
- "Territory_ConvertTimeToUTCOrdinals",,cur%, ord%
- -/
- Wir holen den Alarmbuffer aus der Uhr.
- .= ?buf% = 8 :
- Startadresse
- /=
- "IIC_Control", clkadr% , buf%, 1 :
- write address
- 0:
- "IIC_Control", clkadr%+1, buf%, 8 :
- read alarm
- 25
- BCD-Buffer in den Ordinal-Buffer dekodieren.
- 3H
- Ausserdem koennen wir unsere Zeitmodifikationen anbringen, also
- 4C
- die Zeitzone draufaddieren und unseren Bereich dazunehmen.
- 5= ord%!0 = ((buf%?1
- 15) + ((buf%?1 >>>4)*10)) + zone%
- 65 ord%!4 = ((buf%?2
- 15) + ((buf%?2 >>>4)*10))
- 79 ord%!8 = ((buf%?3
- 15) + ((buf%?3 >>>4)*10)) + 5
- 85 ord%!12 = ((buf%?4
- 15) + ((buf%?4 >>>4)*10))
- 95 ord%!16 = ((buf%?5
- 15) + ((buf%?5 >>>4)*10))
- :5 ord%!20 = ((buf%?6
- 15) + ((buf%?6 >>>4)*10))
- ;*
- --> Ordinale jetzt in local time.
- <:
- "Territory_ConvertOrdinalsToTime", -1, alm%, ord%
- =+
- --> jetzt alm% in UTC + 5 Minuten.
- debug%
- ?N
- "Territory_ConvertStandardDateAndTime", -1, alm%, str%, 60
- ,end%
- ?end% = 13
- A
- "Alarmtime: +5 "$str%
- CC
- Jetzt vergleichen, cur% < alm%, dann war Alarm in Ordnung.
- D! a$ =
- bufferTOstring(cur%)
- E! b$ =
- bufferTOstring(alm%)
- a$,5) <
- b$,5)
- *SETEVAL AlarmMode 1
- H4
- debug%
- "This is an automatic start."
- *SETEVAL AlarmMode 0
- K0
- debug%
- "Alarm out of time-limit."
- *SETEVAL AlarmMode 0
- O,
- debug%
- "The user has started !"
- SN;-------------------------------------------------------------------------
- TG; Lesen eines Bytes von einer beliebigen Adresse. Kann auch benutzt
- U'; werden, um die Adresse zu setzen.
- VN;-------------------------------------------------------------------------
- peek(address%)
- blk%
- blk% 2
- clkadr% = 0
- clkadr% = %10100000
- ?blk% = address%
- "IIC_Control", clkadr%, blk%, 1 :
- write address
- "IIC_Control", clkadr%+1, blk%, 1 :
- read value
- = ?blk%
- _N;-------------------------------------------------------------------------
- `G; Auswerten der beiden Statusregister um zu bestimmen ob die Alarm-
- aH; Leitung gesetzt (0) ist und ob das Alarm-System eingeschaltet ist.
- b!; = Status (>0 = Alarm aktiv)
- ; Bit0= 1 Timer-Alarm
- ; Bit1= 2 Alarm
- e&; Bit2= 4 Alarm-System ist AN
- fN;-------------------------------------------------------------------------
- alarmCheck
- str%, alm%, out%
- str% =
- peek(0)
- str%<4
- kE
- Das Alarm-System ist aus. Bit0 zeigt den Ausgangszustand von
- l%
- Alarm. Bit0=1: Alarm=AKTIV=0
- = str%
- o!
- Das Alarm-System ist an.
- p)
- Bit0 zeigt einen Timer-Alarm an.
- q#
- Bit1 zeigt einen Alarm an.
- rB
- Dies gilt auch wenn Bit7 -stop counting- gesetzt -1- ist.
- s8
- B0, B1 werden noch maskiert vom Alarm-Register.
- alm% =
- peek(8)
- out% = 4
- v5
- (alm%
- 7)>0
- (alm%
- 8)=8
- out% += 1
- w5
- (alm%
- 48)>0
- (alm%
- 128)=128
- out% += 2
- = str%
- out%
- Umsetzen des Buffers in einen String. So kann er einfach als String
- verglichen werden !
- bufferTOstring(buffer%)
- ~H =
- (buffer%?4)+
- (buffer%?3)+
- (buffer%?2)+
- (buffer%?1)+
- (buffer%?0)
-